from django.shortcuts import render
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from .models import Department, Doctor, Appointment, MedicalArticle
from django.contrib.auth import get_user_model
from datetime import datetime
from utils.JWTTool import jwtTool
from utils.amap import amap_call, extract_hospitals_from_v3
from utils.knowledge_cache import knowledge_cache
from django.conf import settings
import json

# Create your views here.

@csrf_exempt
@require_http_methods(["GET", "OPTIONS"])
def get_doctors_by_department(request, department_id):
    """根据科室ID获取医生列表"""
    if request.method == "OPTIONS":
        return JsonResponse({}, status=200)
    
    try:
        # 获取科室信息
        try:
            department = Department.objects.get(id=department_id, is_active=True)
        except Department.DoesNotExist:
            return JsonResponse({
                "code": 404, 
                "msg": "科室不存在", 
                "data": None
            }, status=404)
        
        # 获取该科室的医生列表
        doctors = Doctor.objects.filter(
            department=department, 
            status='active'
        ).order_by('-is_featured', '-rating', 'name')
        
        # 构建返回数据
        doctors_data = []
        for doctor in doctors:
            doctor_info = {
                "id": doctor.id,
                "name": doctor.name,
                "title": doctor.get_title_display(),
                "department": department.name,
                "avatar": doctor.avatar or f"https://via.placeholder.com/150x150/4CAF50/ffffff?text={doctor.name[0]}",
                "rating": doctor.rating,
                "rating_count": doctor.rating_count,
                "experience_years": doctor.experience_years,
                "specialties": doctor.specialties,
                "consultation_fee": float(doctor.consultation_fee),
                "introduction": doctor.introduction,
                "education": doctor.education,
                "hospital": doctor.hospital,
                "is_featured": doctor.is_featured
            }
            doctors_data.append(doctor_info)
        
        return JsonResponse({
            "code": 0,
            "msg": "获取成功",
            "data": {
                "department": {
                    "id": department.id,
                    "name": department.name,
                    "description": department.description,
                    "icon": department.icon
                },
                "doctors": doctors_data,
                "total": len(doctors_data)
            }
        }, status=200)
        
    except Exception as e:
        return JsonResponse({
            "code": 500,
            "msg": f"服务器错误: {str(e)}",
            "data": None
        }, status=500)


@csrf_exempt
@require_http_methods(["GET", "OPTIONS"])
def list_hospitals(request):
    """高德地点检索：GET /api/map/hospitals?city=北京&keywords=医院

    使用装饰器统一key/重试，默认关键词为“医院”。
    """
    if request.method == "OPTIONS":
        return JsonResponse({}, status=200)

    try:
        api_key = getattr(settings, 'AMAP_KEY', None) or '5696bda08f34d11fcb4b179d5879cf4a'

        @amap_call(api_key=api_key, timeout=6, retries=2)
        def place_text(city: str, keywords: str, page: int = 1, location: str | None = None):
            return (
                'https://restapi.amap.com/v3/place/text',
                {
                    'city': city,
                    'keywords': keywords,
                    'types': '090000',  # 医疗保健服务
                    'page': page,
                    'offset': 20,
                    'extensions': 'all',      # 返回扩展信息(biz_ext.rating 等)
                    'sortrule': 'distance',   # 按距离排序并返回 distance
                    **({'location': location} if location else {}),
                }
            )

        city = request.GET.get('city', '')
        keywords = request.GET.get('keywords', '医院')
        # 允许前端传入当前坐标以便返回 distance
        location = request.GET.get('location')  # 'lng,lat'
        data = place_text(city, keywords, page=1, location=location)
        items = extract_hospitals_from_v3(data)

        return JsonResponse({
            'code': 0,
            'msg': 'ok',
            'data': items
        }, status=200)
    except Exception as e:
        return JsonResponse({'code': 500, 'msg': str(e), 'data': None}, status=500)

@csrf_exempt
@require_http_methods(["GET", "OPTIONS"])
def get_departments(request):
    """获取所有科室列表"""
    if request.method == "OPTIONS":
        return JsonResponse({}, status=200)
    
    try:
        departments = Department.objects.filter(is_active=True).order_by('sort_order', 'name')
        
        departments_data = []
        for dept in departments:
            dept_info = {
                "id": dept.id,
                "name": dept.name,
                "icon": dept.icon,
                "description": dept.description,
                "sort_order": dept.sort_order
            }
            departments_data.append(dept_info)
        
        return JsonResponse({
            "code": 0,
            "msg": "获取成功",
            "data": departments_data
        }, status=200)
        
    except Exception as e:
        return JsonResponse({
            "code": 500,
            "msg": f"服务器错误: {str(e)}",
            "data": None
        }, status=500)


@csrf_exempt
@require_http_methods(["GET", "OPTIONS"])
def get_doctor_detail(request, doctor_id):
    """获取医生详情: GET /api/doctors/<id>"""
    if request.method == "OPTIONS":
        return JsonResponse({}, status=200)

    try:
        try:
            doctor = Doctor.objects.select_related('department').get(id=doctor_id)
        except Doctor.DoesNotExist:
            return JsonResponse({
                "code": 404,
                "msg": "医生不存在",
                "data": None
            }, status=404)

        data = {
            "id": doctor.id,
            "name": doctor.name,
            "title": doctor.get_title_display(),
            "department": doctor.department.name if doctor.department else None,
            "hospital": doctor.hospital,
            "specialty": ", ".join(doctor.specialties) if isinstance(doctor.specialties, list) else doctor.specialties,
            "specialties": doctor.specialties,
            "description": doctor.introduction,
            "avatar": doctor.avatar,
            "rating": doctor.rating,
            "experience_years": doctor.experience_years,
            "consultation_fee": float(doctor.consultation_fee),
        }

        return JsonResponse({
            "code": 0,
            "msg": "获取成功",
            "data": data
        }, status=200)
    except Exception as e:
        return JsonResponse({
            "code": 500,
            "msg": f"服务器错误: {str(e)}",
            "data": None
        }, status=500)


@csrf_exempt
@require_http_methods(["GET", "OPTIONS"])
def get_doctor_available_times(request, doctor_id):
    """获取医生在某日期的可预约时间段: GET /api/doctors/<id>/times?date=YYYY-MM-DD

    先返回模拟时间段，后续可接入真实排班。
    """
    if request.method == "OPTIONS":
        return JsonResponse({}, status=200)

    try:
        # 校验医生是否存在
        if not Doctor.objects.filter(id=doctor_id).exists():
            return JsonResponse({
                "code": 404,
                "msg": "医生不存在",
                "data": None
            }, status=404)

        date_str = request.GET.get('date')
        if not date_str:
            return JsonResponse({
                "code": 400,
                "msg": "缺少参数: date",
                "data": None
            }, status=400)

        # 简单返回固定的时间段，前端只需数组即可
        time_slots = [
            "09:00", "09:30", "10:00", "10:30",
            "14:00", "14:30", "15:00", "15:30"
        ]

        return JsonResponse({
            "code": 0,
            "msg": "获取成功",
            "data": time_slots
        }, status=200)
    except Exception as e:
        return JsonResponse({
            "code": 500,
            "msg": f"服务器错误: {str(e)}",
            "data": None
        }, status=500)


@csrf_exempt
@require_http_methods(["POST", "OPTIONS"])
def create_appointment(request):
    """创建预约: POST /api/appointments/

    将前端填写字段与后端模型匹配，保存到 Appointment 表。
    """
    if request.method == "OPTIONS":
        return JsonResponse({}, status=200)

    try:
        try:
            body_unicode = request.body.decode("utf-8") or "{}"
            payload = json.loads(body_unicode)
        except json.JSONDecodeError:
            return JsonResponse({"code": 400, "msg": "请求体不是合法 JSON", "data": None}, status=400)

        doctor_id = payload.get("doctor_id")
        date = payload.get("date")  # YYYY-MM-DD
        time = payload.get("time")  # HH:MM
        patient_name = payload.get("patient_name")
        patient_phone = payload.get("patient_phone")
        symptoms = payload.get("symptoms")

        missing = [k for k, v in {
            "doctor_id": doctor_id,
            "date": date,
            "time": time,
            "patient_name": patient_name,
            "patient_phone": patient_phone,
        }.items() if not v]

        if missing:
            return JsonResponse({
                "code": 400,
                "msg": f"缺少必要参数: {', '.join(missing)}",
                "data": None
            }, status=400)

        # 校验医生是否存在
        try:
            doctor = Doctor.objects.get(id=doctor_id)
        except Doctor.DoesNotExist:
            return JsonResponse({
                "code": 404,
                "msg": "医生不存在",
                "data": None
            }, status=404)

        # 解析 JWT，获取用户
        auth_header = request.headers.get('Authorization') or request.META.get('HTTP_AUTHORIZATION')
        if not auth_header or not auth_header.lower().startswith('bearer '):
            return JsonResponse({"code": 401, "msg": "未登录或缺少令牌", "data": None}, status=401)
        token = auth_header.split(' ')[1]
        try:
            user_id = jwtTool.get_user_id_from_token(token)
        except Exception as e:
            return JsonResponse({"code": 401, "msg": str(e), "data": None}, status=401)

        User = get_user_model()
        try:
            user = User.objects.get(id=user_id)
        except User.DoesNotExist:
            return JsonResponse({"code": 401, "msg": "用户不存在", "data": None}, status=401)

        # 组合预约时间
        try:
            appointment_dt = datetime.strptime(f"{date} {time}", "%Y-%m-%d %H:%M")
        except ValueError:
            return JsonResponse({"code": 400, "msg": "日期或时间格式不正确", "data": None}, status=400)

        # 生成预约号
        appointment_no = "AP" + str(doctor_id) + appointment_dt.strftime("%Y%m%d%H%M")

        # 保存到数据库
        appointment = Appointment.objects.create(
            appointment_no=appointment_no,
            user=user,
            doctor=doctor,
            appointment_type='offline',
            appointment_date=appointment_dt,
            status='pending',
            symptoms=symptoms,
            fee=doctor.consultation_fee,
            remark=f"患者:{patient_name} 电话:{patient_phone}"
        )

        return JsonResponse({
            "code": 0,
            "msg": "预约成功",
            "data": {
                "appointment_no": appointment.appointment_no,
                "doctor": {"id": doctor.id, "name": doctor.name, "title": doctor.get_title_display()},
                "date": date,
                "time": time,
                "patient_name": patient_name,
                "patient_phone": patient_phone,
                "symptoms": symptoms,
                "fee": float(doctor.consultation_fee),
                "status": appointment.status,
            }
        }, status=200)
    except Exception as e:
        return JsonResponse({
            "code": 500,
            "msg": f"服务器错误: {str(e)}",
            "data": None
        }, status=500)


@csrf_exempt
@require_http_methods(["GET", "OPTIONS"])
def list_my_appointments(request):
    """获取当前登录用户的预约列表: GET /api/appointments/my

    需要 Authorization: Bearer <token>
    """
    if request.method == "OPTIONS":
        return JsonResponse({}, status=200)

    try:
        auth_header = request.headers.get('Authorization') or request.META.get('HTTP_AUTHORIZATION')
        if not auth_header or not auth_header.lower().startswith('bearer '):
            return JsonResponse({"code": 401, "msg": "未登录或缺少令牌", "data": None}, status=401)
        token = auth_header.split(' ')[1]
        try:
            user_id = jwtTool.get_user_id_from_token(token)
        except Exception as e:
            return JsonResponse({"code": 401, "msg": str(e), "data": None}, status=401)

        User = get_user_model()
        try:
            user = User.objects.get(id=user_id)
        except User.DoesNotExist:
            return JsonResponse({"code": 401, "msg": "用户不存在", "data": None}, status=401)

        qs = Appointment.objects.select_related('doctor', 'doctor__department').filter(user=user).order_by('-created_at')
        items = []
        for ap in qs:
            items.append({
                "appointment_no": ap.appointment_no,
                "appointment_type": ap.appointment_type,
                "appointment_date": ap.appointment_date.strftime("%Y-%m-%d %H:%M"),
                "status": ap.status,
                "fee": float(ap.fee),
                "doctor": {
                    "id": ap.doctor.id,
                    "name": ap.doctor.name,
                    "title": ap.doctor.get_title_display(),
                    "department": ap.doctor.department.name if ap.doctor.department else None,
                },
                "remark": ap.remark,
                "symptoms": ap.symptoms,
                "created_at": ap.created_at.strftime("%Y-%m-%d %H:%M"),
            })

        return JsonResponse({"code": 0, "msg": "ok", "data": items}, status=200)
    except Exception as e:
        return JsonResponse({
            "code": 500,
            "msg": f"服务器错误: {str(e)}",
            "data": None
        }, status=500)


@csrf_exempt
@require_http_methods(["GET", "OPTIONS"])
def get_knowledge_categories(request):
    """获取知识库分类列表 - 支持Redis缓存"""
    if request.method == "OPTIONS":
        return JsonResponse({}, status=200)
    
    try:
        # 首先尝试从缓存获取
        cached_categories = knowledge_cache.get_categories()
        if cached_categories:
            return JsonResponse({
                "code": 0,
                "msg": "获取成功（缓存）",
                "data": cached_categories
            }, status=200)
        
        # 缓存未命中，从数据源获取
        categories = [
            {'id': 1, 'name': '常见疾病', 'icon': '🩺', 'count': 128},
            {'id': 2, 'name': '健康养生', 'icon': '🌱', 'count': 95},
            {'id': 3, 'name': '营养饮食', 'icon': '🥗', 'count': 87},
            {'id': 4, 'name': '运动健身', 'icon': '💪', 'count': 76},
            {'id': 5, 'name': '心理健康', 'icon': '🧠', 'count': 64},
            {'id': 6, 'name': '妇幼保健', 'icon': '👶', 'count': 92},
            {'id': 7, 'name': '中医养生', 'icon': '🌿', 'count': 58},
            {'id': 8, 'name': '急救知识', 'icon': '🚑', 'count': 45},
            {'id': 9, 'name': '用药指南', 'icon': '💊', 'count': 73},
            {'id': 10, 'name': '体检指南', 'icon': '📋', 'count': 41}
        ]
        
        # 将数据存入缓存
        knowledge_cache.set_categories(categories)
        
        return JsonResponse({
            "code": 0,
            "msg": "获取成功",
            "data": categories
        }, status=200)
        
    except Exception as e:
        return JsonResponse({
            "code": 500,
            "msg": f"服务器错误: {str(e)}",
            "data": None
        }, status=500)


@csrf_exempt
@require_http_methods(["GET", "OPTIONS"])
def get_knowledge_articles(request):
    """获取知识库文章列表 - 支持Redis缓存"""
    if request.method == "OPTIONS":
        return JsonResponse({}, status=200)
    
    try:
        category_id = request.GET.get('category_id')
        search_query = request.GET.get('search', '')
        sort_by = request.GET.get('sort', 'latest')
        page = int(request.GET.get('page', 1))
        page_size = int(request.GET.get('page_size', 12))
        
        # 先尝试从缓存获取
        cache_category_id = int(category_id) if category_id else None
        cached_data = knowledge_cache.get_articles(
            category_id=cache_category_id,
            page=page,
            page_size=page_size,
            sort_by=sort_by,
            search_query=search_query
        )
        
        if cached_data:
            return JsonResponse({
                "code": 0,
                "msg": "获取成功（缓存）",
                "data": cached_data
            }, status=200)
        
        # 模拟文章数据 - 为Redis缓存预留接口
        articles = [
            # 常见疾病分类 (category_id: 1) - 丰富的静态数据
            {
                'id': 1,
                'title': '春季感冒高发期，如何有效预防？',
                'summary': '春季气温变化大，是感冒高发期。本文将详细介绍春季感冒的预防方法和注意事项，包括增强免疫力、注意个人卫生、合理穿衣等方面的实用建议。',
                'cover': 'https://via.placeholder.com/400x250/4CAF50/ffffff?text=春季感冒预防',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '李明华',
                    'title': '内科主任医师',
                    'avatar': 'https://via.placeholder.com/40x40/2196F3/ffffff?text=李'
                },
                'publish_date': '2024-03-15',
                'read_count': 1250,
                'like_count': 89,
                'tags': ['感冒', '预防', '春季', '免疫力']
            },
            {
                'id': 2,
                'title': '高血压患者的日常饮食指南',
                'summary': '高血压是常见的慢性疾病，合理的饮食对控制血压至关重要。本文提供详细的饮食建议和禁忌事项，帮助患者科学管理血压。',
                'cover': 'https://via.placeholder.com/400x250/FF9800/ffffff?text=高血压饮食',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '王建国',
                    'title': '心血管专家',
                    'avatar': 'https://via.placeholder.com/40x40/9C27B0/ffffff?text=王'
                },
                'publish_date': '2024-03-12',
                'read_count': 980,
                'like_count': 67,
                'tags': ['高血压', '饮食', '健康', '控制血压']
            },
            {
                'id': 3,
                'title': '糖尿病患者如何科学监测血糖',
                'summary': '血糖监测是糖尿病管理的重要环节。了解正确的监测方法和时间点，有助于更好地控制病情，预防并发症的发生。',
                'cover': 'https://via.placeholder.com/400x250/E91E63/ffffff?text=血糖监测',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '陈美丽',
                    'title': '内分泌科主任',
                    'avatar': 'https://via.placeholder.com/40x40/FF5722/ffffff?text=陈'
                },
                'publish_date': '2024-03-10',
                'read_count': 856,
                'like_count': 73,
                'tags': ['糖尿病', '血糖', '监测', '控制']
            },
            {
                'id': 4,
                'title': '胃炎的症状识别与日常护理',
                'summary': '胃炎是消化系统常见疾病，早期识别症状并做好日常护理，可以有效缓解病情，避免并发症。本文详解胃炎的表现和护理要点。',
                'cover': 'https://via.placeholder.com/400x250/607D8B/ffffff?text=胃炎护理',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '刘志强',
                    'title': '消化内科医师',
                    'avatar': 'https://via.placeholder.com/40x40/795548/ffffff?text=刘'
                },
                'publish_date': '2024-03-08',
                'read_count': 742,
                'like_count': 56,
                'tags': ['胃炎', '症状', '护理', '消化']
            },
            {
                'id': 5,
                'title': '颈椎病的预防与康复训练',
                'summary': '现代人久坐办公，颈椎病发病率逐年上升。掌握正确的预防方法和康复训练，保护颈椎健康，远离颈椎病困扰。',
                'cover': 'https://via.placeholder.com/400x250/3F51B5/ffffff?text=颈椎保健',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '张晓东',
                    'title': '骨科副主任医师',
                    'avatar': 'https://via.placeholder.com/40x40/009688/ffffff?text=张'
                },
                'publish_date': '2024-03-06',
                'read_count': 923,
                'like_count': 84,
                'tags': ['颈椎病', '预防', '康复', '训练']
            },
            {
                'id': 6,
                'title': '失眠的原因分析及改善方法',
                'summary': '失眠影响生活质量和身体健康。了解失眠的常见原因，采用科学的方法改善睡眠质量，重获优质睡眠。',
                'cover': 'https://via.placeholder.com/400x250/673AB7/ffffff?text=失眠改善',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '周丽娟',
                    'title': '神经内科医师',
                    'avatar': 'https://via.placeholder.com/40x40/E91E63/ffffff?text=周'
                },
                'publish_date': '2024-03-04',
                'read_count': 1167,
                'like_count': 95,
                'tags': ['失眠', '睡眠', '改善', '健康']
            },
            {
                'id': 7,
                'title': '过敏性鼻炎的季节性管理',
                'summary': '过敏性鼻炎在特定季节容易发作。了解过敏原，做好预防措施，有效控制过敏症状，提高生活质量。',
                'cover': 'https://via.placeholder.com/400x250/FF9800/ffffff?text=过敏管理',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '赵晓明',
                    'title': '耳鼻喉科主任',
                    'avatar': 'https://via.placeholder.com/40x40/4CAF50/ffffff?text=赵'
                },
                'publish_date': '2024-03-02',
                'read_count': 634,
                'like_count': 42,
                'tags': ['过敏性鼻炎', '季节性', '管理', '预防']
            },
            {
                'id': 8,
                'title': '便秘的成因及有效缓解方法',
                'summary': '便秘是常见的消化问题，影响日常生活。通过调整饮食和生活习惯，可以有效缓解便秘症状，改善肠道健康。',
                'cover': 'https://via.placeholder.com/400x250/795548/ffffff?text=便秘缓解',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '孙建华',
                    'title': '消化科副主任',
                    'avatar': 'https://via.placeholder.com/40x40/607D8B/ffffff?text=孙'
                },
                'publish_date': '2024-02-28',
                'read_count': 578,
                'like_count': 38,
                'tags': ['便秘', '缓解', '饮食', '调理']
            },
            {
                'id': 9,
                'title': '腰椎间盘突出的预防与治疗',
                'summary': '腰椎间盘突出是常见的骨科疾病。了解发病原因，掌握预防方法和治疗措施，保护腰椎健康。',
                'cover': 'https://via.placeholder.com/400x250/8BC34A/ffffff?text=腰椎保护',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '马文超',
                    'title': '骨科主任医师',
                    'avatar': 'https://via.placeholder.com/40x40/FFC107/ffffff?text=马'
                },
                'publish_date': '2024-02-25',
                'read_count': 891,
                'like_count': 67,
                'tags': ['腰椎间盘突出', '预防', '治疗', '骨科']
            },
            {  
                'id': 10,
                'title': '偏头痛的识别与缓解技巧',
                'summary': '偏头痛是神经系统常见疾病，发作时疼痛剧烈。掌握正确的识别方法和缓解技巧，有效减轻头痛困扰。',
                'cover': 'https://via.placeholder.com/400x250/E91E63/ffffff?text=偏头痛缓解',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '李雪梅',
                    'title': '神经内科副主任',
                    'avatar': 'https://via.placeholder.com/40x40/9C27B0/ffffff?text=李'
                },
                'publish_date': '2024-02-22',
                'read_count': 756,
                'like_count': 54,
                'tags': ['偏头痛', '缓解', '神经', '疼痛']
            },
            {  
                'id': 11,
                'title': '口腔溃疡的预防与护理',
                'summary': '口腔溃疡虽小，但疼痛难忍。了解发病原因，做好日常预防和护理，减少复发，维护口腔健康。',
                'cover': 'https://via.placeholder.com/400x250/FF5722/ffffff?text=口腔护理',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '王海燕',
                    'title': '口腔科主任',
                    'avatar': 'https://via.placeholder.com/40x40/00BCD4/ffffff?text=王'
                },
                'publish_date': '2024-02-20',
                'read_count': 623,
                'like_count': 45,
                'tags': ['口腔溃疡', '预防', '护理', '口腔健康']
            },
            {  
                'id': 12,
                'title': '痔疮的日常预防与保健',
                'summary': '痔疮是常见的肛肠疾病，给生活带来不便。通过改善饮食习惯和生活方式，可以有效预防痔疮发生。',
                'cover': 'https://via.placeholder.com/400x250/607D8B/ffffff?text=痔疮预防',
                'category': '常见疾病',
                'category_id': 1,
                'author': {
                    'name': '陈建国',
                    'title': '肛肠科医师',
                    'avatar': 'https://via.placeholder.com/40x40/795548/ffffff?text=陈'
                },
                'publish_date': '2024-02-18',
                'read_count': 512,
                'like_count': 33,
                'tags': ['痔疮', '预防', '饮食', '生活习惯']
            },

            # 健康养生分类 (category_id: 2) - 丰富的静态数据
            {
                'id': 13,
                'title': '如何调整作息时间，提高睡眠质量',
                'summary': '规律的作息时间是健康生活的基础。学会科学地安排作息，保证充足的睡眠，让身体得到充分的休息和恢复。',
                'cover': 'https://via.placeholder.com/400x250/2196F3/ffffff?text=作息调整',
                'category': '健康养生',
                'category_id': 2,
                'author': {
                    'name': '李静蓉',
                    'title': '睡眠医学专家',
                    'avatar': 'https://via.placeholder.com/40x40/8BC34A/ffffff?text=李'
                },
                'publish_date': '2024-03-14',
                'read_count': 1456,
                'like_count': 123,
                'tags': ['作息', '睡眠', '调整', '健康']
            },
            {
                'id': 14,
                'title': '四季养生之道：春夏秋冬各不同',
                'summary': '中医讲究顺应自然，不同季节有不同的养生重点。掌握四季养生的要点，达到预防疾病、延年益寿的目的。',
                'cover': 'https://via.placeholder.com/400x250/4CAF50/ffffff?text=四季养生',
                'category': '健康养生',
                'category_id': 2,
                'author': {
                    'name': '王德华',
                    'title': '中医内科主任',
                    'avatar': 'https://via.placeholder.com/40x40/FF9800/ffffff?text=王'
                },
                'publish_date': '2024-03-11',
                'read_count': 1234,
                'like_count': 98,
                'tags': ['四季养生', '中医', '自然', '预防']
            },

            # 营养饮食分类 (category_id: 3) - 丰富的静态数据
            {
                'id': 15,
                'title': '均衡营养饮食指南：吃出健康的一天',
                'summary': '均衡的营养是健康的基础。学会合理搭配饮食，控制热量摊入，保证身体所需的各种营养素。',
                'cover': 'https://via.placeholder.com/400x250/4CAF50/ffffff?text=均衡营养',
                'category': '营养饮食',
                'category_id': 3,
                'author': {
                    'name': '杨丽华',
                    'title': '营养学专家',
                    'avatar': 'https://via.placeholder.com/40x40/4CAF50/ffffff?text=杨'
                },
                'publish_date': '2024-03-13',
                'read_count': 1789,
                'like_count': 145,
                'tags': ['均衡营养', '饮食指南', '健康', '营养素']
            },
            {
                'id': 16,
                'title': '抗氧化食物清单：延缓老化的天然选择',
                'summary': '抗氧化食物可以清除体内自由基，延缓老化过程。了解富含抗氧化物质的食物，科学食用，保持青春活力。',
                'cover': 'https://via.placeholder.com/400x250/FF9800/ffffff?text=抗氧化食物',
                'category': '营养饮食',
                'category_id': 3,
                'author': {
                    'name': '陈雅雯',
                    'title': '食疗养生专家',
                    'avatar': 'https://via.placeholder.com/40x40/FF9800/ffffff?text=陈'
                },
                'publish_date': '2024-03-10',
                'read_count': 1234,
                'like_count': 98,
                'tags': ['抗氧化食物', '延缓老化', '自由基', '养生']
            },
            {
                'id': 17,
                'title': '补铁食物大全：预防贫血从饮食开始',
                'summary': '缺铁性贫血影响健康和生活质量。了解富含铁元素的食物，合理搭配饮食，有效预防和改善贫血症状。',
                'cover': 'https://via.placeholder.com/400x250/E91E63/ffffff?text=补铁食物',
                'category': '营养饮食',
                'category_id': 3,
                'author': {
                    'name': '张美玲',
                    'title': '临床营养师',
                    'avatar': 'https://via.placeholder.com/40x40/E91E63/ffffff?text=张'
                },
                'publish_date': '2024-03-08',
                'read_count': 987,
                'like_count': 76,
                'tags': ['补铁食物', '贫血', '铁元素', '预防']
            },
            {
                'id': 18,
                'title': '健康油脂选择指南：妥善摊入好脂肪',
                'summary': '脂肪是人体必需的营养素，但选择正确的脂肪类型至关重要。了解不同脂肪的特点，科学选择，保护心血管健康。',
                'cover': 'https://via.placeholder.com/400x250/2196F3/ffffff?text=健康油脂',
                'category': '营养饮食',
                'category_id': 3,
                'author': {
                    'name': '王志强',
                    'title': '心血管营养师',
                    'avatar': 'https://via.placeholder.com/40x40/2196F3/ffffff?text=王'
                },
                'publish_date': '2024-03-06',
                'read_count': 865,
                'like_count': 67,
                'tags': ['健康油脂', '脂肪选择', '心血管', '营养']
            },

            # 运动健身分类 (category_id: 4) - 丰富的静态数据
            {
                'id': 19,
                'title': '有氧运动的好处与实践指南',
                'summary': '有氧运动是最佳的心血管锻炼方式。了解不同类型的有氧运动，掌握科学的运动方法，提高心肺功能。',
                'cover': 'https://via.placeholder.com/400x250/4CAF50/ffffff?text=有氧运动',
                'category': '运动健身',
                'category_id': 4,
                'author': {
                    'name': '陈明光',
                    'title': '运动医学专家',
                    'avatar': 'https://via.placeholder.com/40x40/4CAF50/ffffff?text=陈'
                },
                'publish_date': '2024-03-12',
                'read_count': 1567,
                'like_count': 134,
                'tags': ['有氧运动', '心血管', '锻炼', '心肺功能']
            },
            {
                'id': 20,
                'title': '力量训练入门：安全有效的肌肉锻炼',
                'summary': '力量训练有助于增强肌肉力量和骨密度。了解正确的训练方法和注意事项，安全有效地建设健康的肌肉系统。',
                'cover': 'https://via.placeholder.com/400x250/FF9800/ffffff?text=力量训练',
                'category': '运动健身',
                'category_id': 4,
                'author': {
                    'name': '李建军',
                    'title': '健身教练',
                    'avatar': 'https://via.placeholder.com/40x40/FF9800/ffffff?text=李'
                },
                'publish_date': '2024-03-09',
                'read_count': 1298,
                'like_count': 108,
                'tags': ['力量训练', '肌肉锻炼', '骨密度', '健身']
            },

            # 心理健康分类 (category_id: 5) - 丰富的静态数据
            {
                'id': 21,
                'title': '焦虑症的识别与自我管理',
                'summary': '焦虑症是常见的心理障碍。学会识别焦虑症状，掌握有效的自我管理技巧，缓解焦虑情绪，提高生活质量。',
                'cover': 'https://via.placeholder.com/400x250/9C27B0/ffffff?text=焦虑管理',
                'category': '心理健康',
                'category_id': 5,
                'author': {
                    'name': '王美丽',
                    'title': '心理咨询师',
                    'avatar': 'https://via.placeholder.com/40x40/9C27B0/ffffff?text=王'
                },
                'publish_date': '2024-03-11',
                'read_count': 1445,
                'like_count': 112,
                'tags': ['焦虑症', '心理健康', '自我管理', '情绪管理']
            },
            {
                'id': 22,
                'title': '情绪管理技巧：如何保持心理平衡',
                'summary': '情绪管理是心理健康的重要组成。学会识别和表达情绪，运用科学方法调节情绪，保持心理平衡。',
                'cover': 'https://via.placeholder.com/400x250/673AB7/ffffff?text=情绪管理',
                'category': '心理健康',
                'category_id': 5,
                'author': {
                    'name': '李文杰',
                    'title': '情绪管理专家',
                    'avatar': 'https://via.placeholder.com/40x40/673AB7/ffffff?text=李'
                },
                'publish_date': '2024-03-08',
                'read_count': 1234,
                'like_count': 95,
                'tags': ['情绪管理', '心理平衡', '心理健康', '调节']
            },

            # 妇幼保健分类 (category_id: 6) - 丰富的静态数据
            {
                'id': 23,
                'title': '孕期营养指南：妈妈和宝宝的健康饮食',
                'summary': '孕期营养关系到母婴双方的健康。了解孕期各阶段的营养需求，科学搭配饮食，保证母婴健康。',
                'cover': 'https://via.placeholder.com/400x250/E91E63/ffffff?text=孕期营养',
                'category': '妇幼保健',
                'category_id': 6,
                'author': {
                    'name': '张丽华',
                    'title': '产科主任医师',
                    'avatar': 'https://via.placeholder.com/40x40/E91E63/ffffff?text=张'
                },
                'publish_date': '2024-03-10',
                'read_count': 1356,
                'like_count': 124,
                'tags': ['孕期营养', '母婴健康', '饮食指南', '孕妇']
            },
            {
                'id': 24,
                'title': '新生儿护理必备知识：新手父母指南',
                'summary': '新生儿护理需要专业知识和细心照料。从喂养到睡眠，从清洁到健康监测，帮助新手父母做好宝宝护理。',
                'cover': 'https://via.placeholder.com/400x250/FF9800/ffffff?text=新生儿护理',
                'category': '妇幼保健',
                'category_id': 6,
                'author': {
                    'name': '陈梅玲',
                    'title': '儿科主任医师',
                    'avatar': 'https://via.placeholder.com/40x40/FF9800/ffffff?text=陈'
                },
                'publish_date': '2024-03-07',
                'read_count': 1198,
                'like_count': 89,
                'tags': ['新生儿护理', '婴儿健康', '新手父母', '育儿']
            },

            # 中医养生分类 (category_id: 7) - 丰富的静态数据
            {
                'id': 25,
                'title': '体质调理与中医养生',
                'summary': '中医讲究因人而宜，不同体质的人需要不同的调理方法。了解自己的体质类型，采用合适的中医养生方法。',
                'cover': 'https://via.placeholder.com/400x250/795548/ffffff?text=体质调理',
                'category': '中医养生',
                'category_id': 7,
                'author': {
                    'name': '朱德华',
                    'title': '中医内科主任',
                    'avatar': 'https://via.placeholder.com/40x40/795548/ffffff?text=朱'
                },
                'publish_date': '2024-03-09',
                'read_count': 1087,
                'like_count': 87,
                'tags': ['体质调理', '中医养生', '因人而宜', '中医']
            },
            {
                'id': 26,
                'title': '穴位按摩入门：日常保健小技巧',
                'summary': '穴位按摩是中医的特色疗法，简单易学。掌握常用穴位的位置和按摩手法，在家就能进行日常保健。',
                'cover': 'https://via.placeholder.com/400x250/607D8B/ffffff?text=穴位按摩',
                'category': '中医养生',
                'category_id': 7,
                'author': {
                    'name': '李明志',
                    'title': '针灸科副主任',
                    'avatar': 'https://via.placeholder.com/40x40/607D8B/ffffff?text=李'
                },
                'publish_date': '2024-03-06',
                'read_count': 923,
                'like_count': 74,
                'tags': ['穴位按摩', '中医疗法', '日常保健', '针灸']
            },

            # 急救知识分类 (category_id: 8) - 丰富的静态数据
            {
                'id': 27,
                'title': '心肺复苏(CPR)正确操作步骤',
                'summary': '心肺复苏是救命的关键技能。学会正确的CPR操作步骤和注意事项，在紧急情况下能够拯救生命。',
                'cover': 'https://via.placeholder.com/400x250/F44336/ffffff?text=心肺复苏',
                'category': '急救知识',
                'category_id': 8,
                'author': {
                    'name': '张健强',
                    'title': '急诊科主任',
                    'avatar': 'https://via.placeholder.com/40x40/F44336/ffffff?text=张'
                },
                'publish_date': '2024-03-08',
                'read_count': 1567,
                'like_count': 145,
                'tags': ['心肺复苏', 'CPR', '急救', '生命救助']
            },
            {
                'id': 28,
                'title': '家庭急救包必备物品清单',
                'summary': '家庭急救包能在意外发生时提供及时的救助。了解必备物品和使用方法，建立家庭安全防线。',
                'cover': 'https://via.placeholder.com/400x250/FF5722/ffffff?text=急救包',
                'category': '急救知识',
                'category_id': 8,
                'author': {
                    'name': '王建东',
                    'title': '急救医学专家',
                    'avatar': 'https://via.placeholder.com/40x40/FF5722/ffffff?text=王'
                },
                'publish_date': '2024-03-05',
                'read_count': 1123,
                'like_count': 98,
                'tags': ['家庭急救包', '急救物品', '安全', '预防']
            },

            # 用药指南分类 (category_id: 9) - 丰富的静态数据
            {
                'id': 29,
                'title': '家庭常用药品存储与使用指南',
                'summary': '家庭常备药箱应该如何配置？了解常用药物的作用、用法和存储方法，确保家庭用药安全。',
                'cover': 'https://via.placeholder.com/400x250/00BCD4/ffffff?text=家庭用药',
                'category': '用药指南',
                'category_id': 9,
                'author': {
                    'name': '张药师',
                    'title': '临床药师',
                    'avatar': 'https://via.placeholder.com/40x40/00BCD4/ffffff?text=张'
                },
                'publish_date': '2024-03-07',
                'read_count': 1345,
                'like_count': 115,
                'tags': ['家庭用药', '药品存储', '用药安全', '常用药']
            },
            {
                'id': 30,
                'title': '抗生素的正确使用与注意事项',
                'summary': '抗生素滥用已成为全球性问题。了解抗生素的正确使用方法，避免耐药性，保障药物疗效。',
                'cover': 'https://via.placeholder.com/400x250/3F51B5/ffffff?text=抗生素使用',
                'category': '用药指南',
                'category_id': 9,
                'author': {
                    'name': '李建华',
                    'title': '感染科主任',
                    'avatar': 'https://via.placeholder.com/40x40/3F51B5/ffffff?text=李'
                },
                'publish_date': '2024-03-04',
                'read_count': 1089,
                'like_count': 87,
                'tags': ['抗生素', '耐药性', '用药安全', '合理用药']
            },

            # 体检指南分类 (category_id: 10) - 丰富的静态数据
            {
                'id': 31,
                'title': '年度体检项目解读：了解自己的健康状况',
                'summary': '体检报告中的各项指标都代表什么意思？学会解读体检报告，及时发现健康问题，采取针对性措施。',
                'cover': 'https://via.placeholder.com/400x250/009688/ffffff?text=体检解读',
                'category': '体检指南',
                'category_id': 10,
                'author': {
                    'name': '陈美丽',
                    'title': '体检科主任',
                    'avatar': 'https://via.placeholder.com/40x40/009688/ffffff?text=陈'
                },
                'publish_date': '2024-03-06',
                'read_count': 1245,
                'like_count': 103,
                'tags': ['体检解读', '健康指标', '体检报告', '健康管理']
            },
            {
                'id': 32,
                'title': '不同年龄段的体检重点项目推荐',
                'summary': '不同年龄的人需要关注不同的健康问题。了解各年龄段的体检重点，制定个性化的体检方案。',
                'cover': 'https://via.placeholder.com/400x250/8BC34A/ffffff?text=年龄体检',
                'category': '体检指南',
                'category_id': 10,
                'author': {
                    'name': '王建国',
                    'title': '预防医学专家',
                    'avatar': 'https://via.placeholder.com/40x40/8BC34A/ffffff?text=王'
                },
                'publish_date': '2024-03-03',
                'read_count': 978,
                'like_count': 82,
                'tags': ['年龄体检', '体检重点', '个性化体检', '预防医学']
            }
                'publish_date': '2024-02-18',
                'read_count': 723,
                'like_count': 54,
                'tags': ['偏头痛', '诱因', '缓解', '技巧']
            },
            # 健康养生分类数据
            {
                'id': 13,
                'title': '健康生活方式：早睡早起的重要性',
                'summary': '良好的作息习惯对身体健康有着重要影响。让我们了解早睡早起的科学依据和实践方法，培养健康的生物钟，提升生活质量。',
                'cover': 'https://via.placeholder.com/400x250/2196F3/ffffff?text=健康作息',
                'category': '健康养生',
                'category_id': 2,
                'author': {
                    'name': '张健康',
                    'title': '健康管理专家',
                    'avatar': 'https://via.placeholder.com/40x40/4CAF50/ffffff?text=张'
                },
                'publish_date': '2024-03-10',
                'read_count': 756,
                'like_count': 45,
                'tags': ['作息', '健康', '养生', '生物钟']
            },
            {
                'id': 14,
                'title': '四季养生：不同季节的保健要点',
                'summary': '中医讲究顺应自然，四季养生各有重点。春养肝、夏养心、秋养肺、冬养肾，掌握四季养生规律，让身体与自然和谐共处。',
                'cover': 'https://via.placeholder.com/400x250/FF9800/ffffff?text=四季养生',
                'category': '健康养生',
                'category_id': 2,
                'author': {
                    'name': '李时珍',
                    'title': '中医养生专家',
                    'avatar': 'https://via.placeholder.com/40x40/8BC34A/ffffff?text=李'
                },
                'publish_date': '2024-03-08',
                'read_count': 892,
                'like_count': 67,
                'tags': ['四季养生', '中医', '保健', '自然']
            },
            {
                'id': 15,
                'title': '水的重要性：正确的饮水方式与健康',
                'summary': '水是生命之源，正确的饮水方式对健康至关重要。了解每日饮水量、饮水时间、水质选择等知识，让喝水成为养生法宝。',
                'cover': 'https://via.placeholder.com/400x250/00BCD4/ffffff?text=健康饮水',
                'category': '健康养生',
                'category_id': 2,
                'author': {
                    'name': '王清源',
                    'title': '营养学博士',
                    'avatar': 'https://via.placeholder.com/40x40/2196F3/ffffff?text=王'
                },
                'publish_date': '2024-03-05',
                'read_count': 634,
                'like_count': 42,
                'tags': ['饮水', '健康', '养生', '营养']
            },
            {
                'id': 16,
                'title': '压力管理：现代人的减压养生法',
                'summary': '现代生活节奏快，压力大。学会科学的压力管理方法，通过冥想、呼吸法、运动等方式释放压力，保持身心健康。',
                'cover': 'https://via.placeholder.com/400x250/9C27B0/ffffff?text=压力管理',
                'category': '健康养生',
                'category_id': 2,
                'author': {
                    'name': '陈静心',
                    'title': '心理健康专家',
                    'avatar': 'https://via.placeholder.com/40x40/E91E63/ffffff?text=陈'
                },
                'publish_date': '2024-03-03',
                'read_count': 723,
                'like_count': 58,
                'tags': ['压力管理', '减压', '冥想', '心理健康']
            },
            {
                'id': 17,
                'title': '足部养生：足浴泡脚的正确方法',
                'summary': '足部是人体第二心脏，正确的足浴泡脚可以促进血液循环，缓解疲劳，改善睡眠。掌握足浴的温度、时间和方法要领。',
                'cover': 'https://via.placeholder.com/400x250/795548/ffffff?text=足部养生',
                'category': '健康养生',
                'category_id': 2,
                'author': {
                    'name': '足疗师傅',
                    'title': '中医理疗师',
                    'avatar': 'https://via.placeholder.com/40x40/607D8B/ffffff?text=足'
                },
                'publish_date': '2024-03-01',
                'read_count': 567,
                'like_count': 39,
                'tags': ['足浴', '泡脚', '养生', '血液循环']
            },
            
            # 营养饮食分类数据
            {
                'id': 18,
                'title': '均衡营养：科学搭配一日三餐',
                'summary': '合理的膳食搭配是健康的基础。了解营养素的作用，学会科学搭配蛋白质、碳水化合物、脂肪、维生素和矿物质。',
                'cover': 'https://via.placeholder.com/400x250/4CAF50/ffffff?text=均衡营养',
                'category': '营养饮食',
                'category_id': 3,
                'author': {
                    'name': '营养师小美',
                    'title': '注册营养师',
                    'avatar': 'https://via.placeholder.com/40x40/FF5722/ffffff?text=营'
                },
                'publish_date': '2024-03-09',
                'read_count': 845,
                'like_count': 72,
                'tags': ['营养搭配', '一日三餐', '膳食', '健康']
            },
            {
                'id': 19,
                'title': '抗氧化食物：延缓衰老的天然良药',
                'summary': '抗氧化食物能够清除自由基，延缓衰老。蓝莓、绿茶、坚果、深色蔬菜等富含抗氧化物质，是天然的抗衰老食品。',
                'cover': 'https://via.placeholder.com/400x250/673AB7/ffffff?text=抗氧化食物',
                'category': '营养饮食',
                'category_id': 3,
                'author': {
                    'name': '抗衰专家',
                    'title': '食疗养生师',
                    'avatar': 'https://via.placeholder.com/40x40/9C27B0/ffffff?text=抗'
                },
                'publish_date': '2024-03-07',
                'read_count': 689,
                'like_count': 54,
                'tags': ['抗氧化', '抗衰老', '食疗', '营养']
            },
            {
                'id': 20,
                'title': '补血养颜：女性必知的补血食谱',
                'summary': '女性容易出现气血不足，影响美容和健康。红枣、桂圆、阿胶、猪肝等食物具有很好的补血效果，科学食用更健康。',
                'cover': 'https://via.placeholder.com/400x250/E91E63/ffffff?text=补血养颜',
                'category': '营养饮食',
                'category_id': 3,
                'author': {
                    'name': '美容营养师',
                    'title': '女性健康专家',
                    'avatar': 'https://via.placeholder.com/40x40/FF9800/ffffff?text=美'
                },
                'publish_date': '2024-03-04',
                'read_count': 734,
                'like_count': 68,
                'tags': ['补血', '养颜', '女性健康', '食谱']
            },
            {
                'id': 21,
                'title': '健康零食：聪明选择办公室小食',
                'summary': '办公室久坐容易饿，选择健康零食很重要。坚果、水果干、酸奶、全麦饼干等既能满足口腹之欲，又不会影响健康。',
                'cover': 'https://via.placeholder.com/400x250/FF9800/ffffff?text=健康零食',
                'category': '营养饮食',
                'category_id': 3,
                'author': {
                    'name': '办公室营养师',
                    'title': '职场健康顾问',
                    'avatar': 'https://via.placeholder.com/40x40/4CAF50/ffffff?text=办'
                },
                'publish_date': '2024-03-02',
                'read_count': 512,
                'like_count': 35,
                'tags': ['健康零食', '办公室', '营养', '职场']
            },
            
            # 运动健身分类数据
            {
                'id': 22,
                'title': '有氧运动：心肺功能的最佳训练',
                'summary': '有氧运动是提升心肺功能的最佳方式。跑步、游泳、骑行、快走等运动方式，掌握正确的强度和时间，让运动更有效。',
                'cover': 'https://via.placeholder.com/400x250/2196F3/ffffff?text=有氧运动',
                'category': '运动健身',
                'category_id': 4,
                'author': {
                    'name': '健身教练阿强',
                    'title': '国家级健身指导员',
                    'avatar': 'https://via.placeholder.com/40x40/FF5722/ffffff?text=强'
                },
                'publish_date': '2024-03-11',
                'read_count': 923,
                'like_count': 86,
                'tags': ['有氧运动', '心肺功能', '跑步', '健身']
            },
            {
                'id': 23,
                'title': '力量训练：塑造完美身材的秘诀',
                'summary': '力量训练不仅能塑造肌肉线条，还能提高基础代谢率。哑铃、杠铃、自重训练等方式，科学安排训练计划，避免运动损伤。',
                'cover': 'https://via.placeholder.com/400x250/FF5722/ffffff?text=力量训练',
                'category': '运动健身',
                'category_id': 4,
                'author': {
                    'name': '肌肉男神',
                    'title': '力量举教练',
                    'avatar': 'https://via.placeholder.com/40x40/795548/ffffff?text=肌'
                },
                'publish_date': '2024-03-06',
                'read_count': 678,
                'like_count': 59,
                'tags': ['力量训练', '肌肉', '塑形', '代谢']
            },
            {
                'id': 24,
                'title': '瑜伽入门：身心灵的和谐统一',
                'summary': '瑜伽是一种身心并重的运动方式。通过体位法、呼吸法、冥想法，达到身体柔韧、心境平和的状态，适合各个年龄段人群。',
                'cover': 'https://via.placeholder.com/400x250/9C27B0/ffffff?text=瑜伽入门',
                'category': '运动健身',
                'category_id': 4,
                'author': {
                    'name': '瑜伽导师莲花',
                    'title': '高级瑜伽教练',
                    'avatar': 'https://via.placeholder.com/40x40/E91E63/ffffff?text=莲'
                },
                'publish_date': '2024-02-29',
                'read_count': 567,
                'like_count': 47,
                'tags': ['瑜伽', '身心', '冥想', '柔韧']
            },
        
        # 过滤文章
        filtered_articles = articles
        if category_id:
            filtered_articles = [a for a in filtered_articles if a['category_id'] == int(category_id)]
        
        if search_query:
            query = search_query.lower()
            filtered_articles = [a for a in filtered_articles if 
                               query in a['title'].lower() or 
                               query in a['summary'].lower() or 
                               any(query in tag.lower() for tag in a['tags'])]
        
        # 排序
        if sort_by == 'popular':
            filtered_articles.sort(key=lambda x: x['read_count'], reverse=True)
        elif sort_by == 'favorites':
            filtered_articles.sort(key=lambda x: x['like_count'], reverse=True)
        else:  # latest
            filtered_articles.sort(key=lambda x: x['publish_date'], reverse=True)
        
        # 分页
        total = len(filtered_articles)
        start = (page - 1) * page_size
        end = start + page_size
        paginated_articles = filtered_articles[start:end]
        
        # 构建返回数据
        result_data = {
            "articles": paginated_articles,
            "total": total,
            "page": page,
            "page_size": page_size
        }
        
        # 存入缓存
        knowledge_cache.set_articles(
            articles_data=result_data,
            category_id=cache_category_id,
            page=page,
            page_size=page_size,
            sort_by=sort_by,
            search_query=search_query
        )
        
        return JsonResponse({
            "code": 0,
            "msg": "获取成功",
            "data": result_data
        }, status=200)
        
    except Exception as e:
        return JsonResponse({
            "code": 500,
            "msg": f"服务器错误: {str(e)}",
            "data": None
        }, status=500)